$.extend($.fn.jqGrid, {
	aceInit : function(pager, pin) {


		// resize on sidebar collapse/expand
		var parent_column = $(this).closest('[class*="col-"]');
		$(document).on('settings.ace.jqGrid', function(ev, event_name, collapsed) {
			if (event_name === 'sidebar_collapsed' || event_name === 'main_container_fixed') {
				// setTimeout is for webkit only to give time for DOM changes
				// and
				// then redraw!!!
				setTimeout(function() {
					$(this).jqGrid('setGridWidth', parent_column.width());
					$(this).jqGrid('setGridWidth', Math.min($(window).height()-300,340)); 
				}, 0);
			}
		})	
		
		var p = $.extend(true, {

			height : Math.min($(window).height()-300,340),
			viewrecords : true,
			rowNum : 10,
			rowList : [ 10, 50, 100 ],
			prmNames: {id: "usrKey"},
			pager : pager,
			altRows : true,
			mtype:"POST",
			// toppager: true,

			multiselect : true,
			// multikey: "ctrlKey",
			multiboxonly : true,

			loadComplete : function() {
				var table = this;
				setTimeout(function() {
					styleCheckbox(table);
					updateActionIcons(table);
					updatePagerIcons(table);
					enableTooltips(table);
				}, 0);
			},
			colModel : [ {
				name : 'myac',
				index : '',
				width : 80,
				fixed : true,
				sortable : true,
				sortname : 'usrKey',
				resize : false,
				formatter : 'actions',
				formatoptions : {
					keys : true,
					// delbutton: false,//disable delete button

					delOptions : {
						recreateForm : true,
						beforeShowForm : beforeDeleteCallback
					},
				// editformbutton:true, editOptions:{recreateForm: true,
				// beforeShowForm:beforeEditCallback}
				}
			} ],
			sortable : true,
			sortorder:'desc'
			,jsonReader : {  
		      //   page: "page",  
		      //   total: "total",  
		      //   records: "rows"
			  id : "fdKey"
		     }
		}, pin);

		jQuery(this).jqGrid(p);

		// the grid get the correct size
		$(window).triggerHandler('resize.jqGrid');// trigger window resize to
		// make

		function style_delete_form(form) {
			var buttons = form.next().find('.EditButton .fm-button');
			buttons.addClass('btn btn-sm btn-white btn-round').find('[class*="-icon"]').hide();// ui-icon,
			// s-icon
			buttons.eq(0).addClass('btn-danger').prepend('<i class="ace-icon fa fa-trash-o"></i>');
			buttons.eq(1).addClass('btn-default').prepend('<i class="ace-icon fa fa-times"></i>')
		}

		function beforeDeleteCallback(e) {
			var form = $(e[0]);
			//alert("test" + form);
			if (form.data('styled'))
				return false;

			form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />')
			style_delete_form(form);

			form.data('styled', true);
		}

		// it causes some flicker when reloading or navigating grid
		// it may be possible to have some custom formatter to do this as the
		// grid is being created to prevent this
		// or go back to default browser checkbox styles for the grid
		function styleCheckbox(table) {
			/**
			 * $(table).find('input:checkbox').addClass('ace') .wrap('<label
			 * />') .after('<span class="lbl align-top" />')
			 * 
			 * 
			 * $('.ui-jqgrid-labels th[id*="_cb"]:first-child')
			 * .find('input.cbox[type=checkbox]').addClass('ace') .wrap('<label
			 * />').after('<span class="lbl align-top" />');
			 */
		}

		// unlike navButtons icons, action icons in rows seem to be hard-coded
		// you can change them like this in here if you want
		function updateActionIcons(table) {
			/**
			 * var replacement = { 'ui-ace-icon fa fa-pencil' : 'ace-icon fa
			 * fa-pencil blue', 'ui-ace-icon fa fa-trash-o' : 'ace-icon fa
			 * fa-trash-o red', 'ui-icon-disk' : 'ace-icon fa fa-check green',
			 * 'ui-icon-cancel' : 'ace-icon fa fa-times red' };
			 * $(table).find('.ui-pg-div span.ui-icon').each(function(){ var
			 * icon = $(this); var $class =
			 * $.trim(icon.attr('class').replace('ui-icon', '')); if($class in
			 * replacement) icon.attr('class', 'ui-icon '+replacement[$class]); })
			 */
		}

		// replace icons with FontAwesome icons like above
		function updatePagerIcons(table) {
			var replacement = {
			'ui-icon-seek-first' : 'icon-double-angle-left bigger-140',
            						'ui-icon-seek-prev' : 'icon-angle-left bigger-140',
            						'ui-icon-seek-next' : 'icon-angle-right bigger-140',
            						'ui-icon-seek-end' : 'icon-double-angle-right bigger-140'
			};
			$('.ui-pg-table:not(.navtable) > tbody > tr > .ui-pg-button > .ui-icon').each(function() {
				var icon = $(this);
				var $class = $.trim(icon.attr('class').replace('ui-icon', ''));

				if ($class in replacement)
					icon.attr('class', 'ui-icon ' + replacement[$class]);
			})
		}

		function enableTooltips(table) {
			$('.navtable .ui-pg-button').tooltip({
				container : 'body'
			});
			$(table).find('.ui-pg-div').tooltip({
				container : 'body'
			});
		}
		
		// enable search/filter toolbar
		//jQuery(this).jqGrid('filterToolbar',{defaultSearch:true,stringResult:true})
		//jQuery(this).filterToolbar({});

	},

	aceNavGrid : function(pager,operFlag) {

		jQuery(this).jqGrid('navGrid', pager, { // navbar options
			edit : false,
			editicon : 'ace-icon fa fa-pencil blue',
			add : false,
			addicon : 'ace-icon fa fa-plus-circle purple',
			del : false,
			delicon : 'ace-icon fa fa-trash-o red',
			search : false,
			searchicon : 'ace-icon fa fa-search orange',
			refresh : true,
			refreshicon : 'ace-icon fa fa-refresh green',
			view : false,
			viewicon : 'ace-icon fa fa-search-plus grey',
		}, {
			// edit record form
			// closeAfterEdit: true,
			// width: 700,
			recreateForm : true,
			beforeShowForm : function(e) {
				var form = $(e[0]);
				form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />')
				style_edit_form(form);
				
			}
		}, {
			// new record form
			// width: 700,
			closeAfterAdd : true,
			recreateForm : true,
			viewPagerButtons : false,
			beforeShowForm : function(e) {
				var form = $(e[0]);
				form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />')
				style_edit_form(form);
			}
		}, {
			// delete record form
			recreateForm : true,
			beforeShowForm : function(e) {
				var form = $(e[0]);
				if (form.data('styled'))
					return false;

				form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />')
				style_delete_form(form);

				form.data('styled', true);
			},
			onClick : function(e) {
				alert(1);
			}
		}, {
			// search form
			recreateForm : true,
			afterShowSearch : function(e) {
				var form = $(e[0]);
				form.closest('.ui-jqdialog').find('.ui-jqdialog-title').wrap('<div class="widget-header" />')
				style_search_form(form);
			},
			afterRedraw : function() {
				style_search_filters($(this));
			},
			multipleSearch : true
		/**
		 * multipleGroup:true, showQuery: true
		 */
		}, {
			// view record form
			recreateForm : true,
			beforeShowForm : function(e) {
				var form = $(e[0]);
				form.closest('.ui-jqdialog').find('.ui-jqdialog-title').wrap('<div class="widget-header" />')
			}
		})

		$(document).on('ajaxloadstart', function(e) {
			$(this).jqGrid('GridUnload');
			$('.ui-jqdialog').remove();
		});

		function style_edit_form(form) {
			// enable datepicker on "sdate" field and switches for "stock" field
			form.find('input[name=sdate]').datepicker({
				format : 'yyyy-mm-dd',
				autoclose : true
			}).end().find('input[name=stock]').addClass('ace ace-switch ace-switch-5').after(
					'<span class="lbl"></span>');
			// don't wrap inside a label element, the checkbox value won't be
			// submitted (POST'ed)
			// .addClass('ace ace-switch ace-switch-5').wrap('<label
			// class="inline" />').after('<span class="lbl"></span>');

			// update buttons classes
			var buttons = form.next().find('.EditButton .fm-button');
			buttons.addClass('btn btn-sm').find('[class*="-icon"]').hide();// ui-icon,
			// s-icon
			buttons.eq(0).addClass('btn-primary').prepend('<i class="ace-icon fa fa-check"></i>');
			buttons.eq(1).prepend('<i class="ace-icon fa fa-times"></i>')

			buttons = form.next().find('.navButton a');
			buttons.find('.ui-icon').hide();
			buttons.eq(0).append('<i class="ace-icon fa fa-chevron-left"></i>');
			buttons.eq(1).append('<i class="ace-icon fa fa-chevron-right"></i>');
		}

		function style_search_filters(form) {
			form.find('.delete-rule').val('X');
			form.find('.add-rule').addClass('btn btn-xs btn-primary');
			form.find('.add-group').addClass('btn btn-xs btn-success');
			form.find('.delete-group').addClass('btn btn-xs btn-danger');
		}
		function style_search_form(form) {
			var dialog = form.closest('.ui-jqdialog');
			var buttons = dialog.find('.EditTable')
			buttons.find('.EditButton a[id*="_reset"]').addClass('btn btn-sm btn-info').find('.ui-icon').attr('class',
					'ace-icon fa fa-retweet');
			buttons.find('.EditButton a[id*="_query"]').addClass('btn btn-sm btn-inverse').find('.ui-icon').attr(
					'class', 'ace-icon fa fa-comment-o');
			buttons.find('.EditButton a[id*="_search"]').addClass('btn btn-sm btn-purple').find('.ui-icon').attr(
					'class', 'ace-icon fa fa-search');
		}

		function beforeEditCallback(e) {
			var form = $(e[0]);
			form.closest('.ui-jqdialog').find('.ui-jqdialog-titlebar').wrapInner('<div class="widget-header" />')
			style_edit_form(form);
		}

	},

	searchDailog : function(options) {
		
		var p = $.extend(true, {
			recreateForm : true,
			afterShowSearch : function(e) {
				var form = $(e[0]);
				form.closest('.ui-jqdialog').find('.ui-jqdialog-title').wrap('<div class="widget-header" />')
				style_search_form(form);
			},
			afterRedraw : function() {
				style_search_filters($(this));
			},
			multipleSearch : true ,
			//multipleGroup: true,
			sopt:['eq','ne','cn','bw','ew']
		} , options);
		
		jQuery(this).jqGrid('searchGrid', p);
			
		function style_search_filters(form) {
			form.find('.delete-rule').val('X');
			form.find('.add-rule').addClass('btn btn-xs btn-primary');
			form.find('.add-group').addClass('btn btn-xs btn-success');
			form.find('.delete-group').addClass('btn btn-xs btn-danger');
		}
		
		function style_search_form(form) {
			var dialog = form.closest('.ui-jqdialog');
			var buttons = dialog.find('.EditTable')
			buttons.find('.EditButton a[id*="_reset"]').addClass('btn btn-sm btn-info').find('.ui-icon').attr('class',
					'ace-icon fa fa-retweet');
			buttons.find('.EditButton a[id*="_query"]').addClass('btn btn-sm btn-inverse').find('.ui-icon').attr(
					'class', 'ace-icon fa fa-comment-o');
			buttons.find('.EditButton a[id*="_search"]').addClass('btn btn-sm btn-purple').find('.ui-icon').attr(
					'class', 'ace-icon fa fa-search');
			$('.EditButton a[id*="_search"]').bind('click',function(){
				var jqg2 = $(".input-elm").val();
				if(jqg2 == ""){
					
				}else{
									  //display:block使用，获取当前显示div的元素
					$("div.ui-jqdialog:visible a.ui-jqdialog-titlebar-close").find("span").click();
				}
				
			})
		}	
	}
});

function resizeToJqgrid(jqgrid_id){
	var parent_column = $(jqgrid_id).closest('[class*="col-"]');
	$(document).on('settings.ace.jqGrid' , function(ev, event_name, collapsed) {
		if( event_name === 'sidebar_collapsed' || event_name === 'main_container_fixed' ) {
			//setTimeout is for webkit only to give time for DOM changes and then redraw!!!
			setTimeout(function() {
				$(jqgrid_id).jqGrid( 'setGridWidth', parent_column.width() * 0.99 );
			}, 0);
		}
    })
}